Multi-processor systems have become commonplace in the last few years, enabling multiple concurrent processes in the system to achieve higher speed networking. To achieve optimal use of this architecture, a technology known as receive side scaling (hereinafter “RSS”) may be used to enable receive-processing to scale with the number of available computer processors by allowing the network load from a network controller to be balanced across multiple processors. An implementation of RSS is introduced by Microsoft® Corporation (hereinafter MS® RSS), and is described in “Scalable Networking: Eliminating the Receive Processing Bottleneck—Introducing RSS”, WinHEC (Windows Hardware Engineering Conference), Apr. 19, 2005 (hereinafter “the WinHEC Apr. 19, 2005 white paper”). MS® RSS is part of the Network Device Interface Specification (hereinafter “NDIS”) 6.0, available from Microsoft® Windows®. NDIS 6.0 provides for a device driver that enables a single network controller to support multiple network protocols, or that enables multiple network controllers to support multiple network protocols. NDIS 6.0 is currently still in the works, but information about it is available from Microsoft® Corporation of Redmond, Wash.
In MS® RSS implementations, a hash result may be generated by performing a hash function over a packet tuple obtained from a packet received over a network. Typical uses of MS® RSS are implemented on endpoint systems, that is, systems in which traffic is terminated at the system in which MS® RSS is implemented. MS® RSS is used in these systems to balance large numbers of network flows evenly over multiple queues for network processing. The MS® RSS hash function is cryptographically secure—not only is it difficult to predict the hash result of any given packet tuple, but also swapping the individual inputs of any of the packet tuples does not result in the same hash result. As such—a remote system cannot a priori determine what hash value will be calculated from any given packet tuple, and hence cannot deliberately or accidentally overload internal queues as a side-effect of the hash calculation.